const { spawn } = require('child_process');
const path = require('path');
const fs = require('fs');
const { pushSummarizationToBitable } = require('./pushSummarization');
const chalk = require('chalk');

// 配置路径
const PYTHON_SCRIPT_PATH = path.join(__dirname, '..', 'parse_results.py');
const SUMMARIZATION_FILE = path.join(__dirname, '..', 'ParseResults', 'summarization.json');

/**
 * 执行Python解析脚本
 */
function runPythonScript() {
  return new Promise((resolve, reject) => {
    console.log(chalk.blue('🐍 开始执行Python解析脚本...'));
    console.log(chalk.gray(`脚本路径: ${PYTHON_SCRIPT_PATH}`));
    
    // 切换到Python脚本所在目录
    const scriptDir = path.dirname(PYTHON_SCRIPT_PATH);
    
    const pythonProcess = spawn('python', [PYTHON_SCRIPT_PATH], {
      cwd: scriptDir,
      stdio: 'pipe',
      encoding: 'utf8',
      env: {
        ...process.env,
        PYTHONIOENCODING: 'utf-8'
      }
    });
    
    let stdout = '';
    let stderr = '';
    
    pythonProcess.stdout.on('data', (data) => {
      const output = data.toString('utf8');
      stdout += output;
      // 实时显示Python脚本输出
      process.stdout.write(chalk.cyan(output));
    });
    
    pythonProcess.stderr.on('data', (data) => {
      const error = data.toString('utf8');
      stderr += error;
      process.stderr.write(chalk.red(error));
    });
    
    pythonProcess.on('close', (code) => {
      if (code === 0) {
        console.log(chalk.green('✅ Python解析脚本执行成功!'));
        resolve({ stdout, stderr });
      } else {
        console.log(chalk.red(`❌ Python脚本执行失败，退出码: ${code}`));
        reject(new Error(`Python脚本执行失败，退出码: ${code}\n${stderr}`));
      }
    });
    
    pythonProcess.on('error', (error) => {
      console.log(chalk.red('❌ 启动Python脚本时出错:'));
      console.error(error);
      reject(error);
    });
  });
}

/**
 * 检查summarization.json文件是否存在
 */
function checkSummarizationFile() {
  return new Promise((resolve, reject) => {
    console.log(chalk.blue('📄 检查summarization.json文件...'));
    console.log(chalk.gray(`文件路径: ${SUMMARIZATION_FILE}`));
    
    // 等待一下，确保文件写入完成
    setTimeout(() => {
      if (fs.existsSync(SUMMARIZATION_FILE)) {
        try {
          const content = fs.readFileSync(SUMMARIZATION_FILE, 'utf8');
          const data = JSON.parse(content);
          
          if (data.title && data.paragraph) {
            console.log(chalk.green('✅ summarization.json文件检查通过!'));
            console.log(chalk.gray(`标题: ${data.title}`));
            console.log(chalk.gray(`内容长度: ${data.paragraph.length}字符`));
            resolve(data);
          } else {
            reject(new Error('summarization.json文件格式不正确，缺少title或paragraph字段'));
          }
        } catch (error) {
          reject(new Error(`解析summarization.json文件失败: ${error.message}`));
        }
      } else {
        reject(new Error('summarization.json文件不存在，Python脚本可能执行失败'));
      }
    }, 2000); // 等待2秒确保文件写入完成
  });
}

/**
 * 主函数：自动解析并推送
 */
async function autoParseAndPush() {
  console.log(chalk.bold.blue('\n🚀 开始自动解析推送流程...\n'));
  
  try {
    // 步骤1: 执行Python解析脚本
    console.log(chalk.bold('=== 步骤1: 执行Python解析脚本 ==='));
    await runPythonScript();
    
    // 步骤2: 检查生成的文件
    console.log(chalk.bold('\n=== 步骤2: 检查生成的文件 ==='));
    const summaryData = await checkSummarizationFile();
    
    // 步骤3: 推送到飞书多维表格
    console.log(chalk.bold('\n=== 步骤3: 推送到飞书多维表格 ==='));
    await pushSummarizationToBitable();
    
    // 完成
    console.log(chalk.bold.green('\n🎉 自动解析推送流程完成!'));
    console.log(chalk.green('✅ Python脚本执行成功'));
    console.log(chalk.green('✅ 数据解析完成'));
    console.log(chalk.green('✅ 飞书推送成功'));
    
  } catch (error) {
    console.log(chalk.bold.red('\n❌ 自动解析推送流程失败!'));
    console.error(chalk.red('错误详情:'), error.message);
    
    // 提供故障排除建议
    console.log(chalk.yellow('\n🔧 故障排除建议:'));
    console.log(chalk.yellow('1. 确保Python环境已正确安装'));
    console.log(chalk.yellow('2. 确保response_output.json文件存在于Python脚本目录'));
    console.log(chalk.yellow('3. 确保飞书应用凭证配置正确'));
    console.log(chalk.yellow('4. 检查网络连接是否正常'));
    
    process.exit(1);
  }
}

/**
 * 显示使用说明
 */
function showUsage() {
  console.log(chalk.bold.cyan('\n📖 自动解析推送脚本使用说明'));
  console.log(chalk.cyan('\n功能:'));
  console.log('  1. 自动执行Python解析脚本 (parse_results.py)');
  console.log('  2. 检查生成的summarization.json文件');
  console.log('  3. 自动推送数据到飞书多维表格');
  
  console.log(chalk.cyan('\n前置条件:'));
  console.log('  1. Python环境已安装');
  console.log('  2. response_output.json文件存在');
  console.log('  3. 飞书应用凭证已配置');
  
  console.log(chalk.cyan('\n使用方法:'));
  console.log('  node 自动解析推送.js');
  
  console.log(chalk.cyan('\n文件路径:'));
  console.log(`  Python脚本: ${PYTHON_SCRIPT_PATH}`);
  console.log(`  输出文件: ${SUMMARIZATION_FILE}`);
}

// 如果直接运行此脚本
if (require.main === module) {
  // 检查命令行参数
  const args = process.argv.slice(2);
  
  if (args.includes('--help') || args.includes('-h')) {
    showUsage();
    process.exit(0);
  }
  
  // 显示启动信息
  console.log(chalk.bold.magenta('🤖 自动解析推送脚本'));
  console.log(chalk.magenta('版本: 1.0.0'));
  console.log(chalk.magenta('作者: AI Assistant'));
  
  // 开始执行
  autoParseAndPush();
}

module.exports = {
  autoParseAndPush,
  runPythonScript,
  checkSummarizationFile
};